## Cyclotomic polynomials

from PyM import *


# # n-th cyclotomic polynomial Q_n
# def cyclotomic_polynomial(n):
#     [_,X]=polynomial_ring(Z_)
#     if n==1: return X**0
#     mu = mu_moebius
#     D = divisors(n)
#     Dp = [d for d in D if mu(d)==1]
#     Dm = [d for d in D if mu(d)==-1]
#     P = 1
#     for d in Dp:
#         P *= X**(n//d)-1
#     for d in Dm:
#         P = P/(X**(n//d)-1)
#     return P
    
Q = cyclotomic_polynomial
 
P = [Q(n) for n in range(1,11) if not is_prime(n)]  

show(P)

Q27 = Q(27)

show(Q27)

show(factor(Q27,Zn(7))) 